Agent 相关知识学习

这边列举的是学习的马克的技术工坊的相关内容!笔记也是按照其时间排列进行的,由于时间跨度较大,所以可能会出现一些「知识点冲突的情况」,到时候稍微说明一下即可

Context Engineering

上下文经常会遇到的问题:

上下文工程也就是为了怎么精心的给 LLM 的输入内容让他在上下文窗口内理解的尽可能的准确

大概划分为四类:

  1. 保存上下文
    通过筛选/总结将文本存入到内存/硬盘中去,当然,这里存放的内容多了,如何选择到有效的信息也就成为了一个问题
  2. 选择上下文
    分为静态选择和动态选择

静态选择:将一些永远重要,必须遵循的东西全部放进去,之后每次请求都会全部放到 context 中,比如某些 IDE 里面的 rules 或者 CLAUDE.md 这个文件

动态选择:选择与用户问题最为相关的内容放入上下文:比如 chatgpt 挑选记忆,挑选使用哪个工具

动态选择实现方式最常见的就是 RAG*

  1. 压缩上下文
    对于上下文中最占空间的是:工具执行结果,LLM 输出结果

如果不及时处理,上下文很快会被挤占满

所以需要将上下文进行压缩,比如 claude/codex 在快将上下文占满的时候就会开始压缩,claude code 还可以指定重点内容进行压缩(当然,压缩就相对简单了,直接总结一下即可)

  1. 隔离上下文
    常见于 multi-Agent 系统中

每个 subAgent 都有着自己的独立记忆体系,工具,历史,互相隔离,不受影响

btw,东西有点少啊,我感觉没学到什么东西呀...感觉只是在科普,后面还需要学习更多的东西

temperature&top-p

这两个参数越高越随机,越有创造力,越低则越保守,确定,但是为什么呢?又为什么需要两个参数?到底是怎么影响的呢?

一点点原理:

这里只选择最高分的话,其他的东西就没有机会了

需要转换为概率!

Softmax(zi)=ezij=1Kezj

zi 代表第 i 个词的分数(logit),k 代表单词总量,输出值代表输出第 i 个词的概率

那么:

现在则是从 [0,100] 取一个随机数,落在哪个位置输出哪个

那么这两个参数体现在?

这个函数得加个参数,默认 T=1 才是上面那个
Softmax(zi)=ezi/Tj=1Kezj/T

这里 T(温度) 会改变不同词的概率差距

top-p(最高累加概率) 有什么用?

对于上面看到的那个数轴而言,可以看到,会有小概率的情况我们会选择到一些非常莫名其妙的词,比如自行车,我们是需要避免这样的情况出现的,这种词被称为长尾词

top-p 相当于一个阈值,达到了这个阈值的概率之后,后面的东西则不再保留,若 top-p=0.9,则数轴从 90 开始截断了,自行车和 hello 没有机会出现了,然后这个数轴又会等比例放大回 100,这样就有效的去除了垃圾词

可以理解为一个入门门槛

小结:

Token 生成机制

Skills

claude code 使用

Claude Code 从 0 到 1 全攻略:MCP / SubAgent / Agent Ski...

最好的教程!!!非常有用,学到了很多!即使用了很久还是很多不知道

MCP

本身和模型的能力无关

这个部分的质量真的高!!需要做笔记!

ReAct 模式需要知道

Fuction calling

即模型和外部工具进行交互的能力,即调用工具的能力

A2A 协议

即 Agent to Agent 协议

作用于 Agent 之间

这两个协议的作用域不同

Agent 的概念、原理与构建模式

Agent 的概念、原理与构建模式 —— 从零打造一个简化版的 Claude Code_哔哩哔哩...

ReAct 模式:

Plan-and-excute 模式:

对于这里做 执行的部分也可能采用 ReAct 模式

示例:

第一步:

第二轮:

第三轮:

在最后一个位置的时候:流程图则是「最终的答案如下」了

ReAct 和 CodeAct-Agent

视频链接:ReAct和CodeAct-Agent调用外部工具的两种方法,从原理到实战-工具调用/MCP/Fun...


1. ReAct(Reasoning + Acting)

2. CodeAct(Coding + Acting)

RAG*

即检索增强生成

一个基本的运行流程:

基本流程

准备(提问前):分片,索引
回答(提问后):召回,重排,生成

分片:有很多种的分片方式,总之要做到的都是将文档分为若干份
索引:通过 embedding 将片段文本转化为向量,然后将片段文本和片段向量存入向量数据库中

embedding:将文本转为向量的一个过程

向量数据库:存储和查询向量的数据库,其中提供了计算向量相似度相关的函数

召回:搜索与用户问题相关片段的过程

显然,这里要返回最相似的结果,就需要「计算向量相似度

这里将问题向量和片段向量做某个「相似度的运算」(当然方式不唯一),算出相似度,然后将相似度进行排序即可

计算方式:

重排:从召回的结果中再继续挑选更相似的作为重排的结果

这样不是会重复了吗,和召回有什么区别?同样的事情干两份?

直接召回当然是可以的,但是效果没有召回+重排效果好,这两个阶段使用的文本相似度逻辑不同

对比一下:

生成:即生成答案

总体流程:

使用 Python 构建 RAG:
使用Python构建RAG系统 —— 用代码还原 RAG系统的每个细节_哔哩哔哩_bilibili

OpenAI RAG

OpenAI 的 RAG 范例,无需向量化_哔哩哔哩_bilibili

先抽取相关内容,再根据内容回答问题的方式就是 RAG

不同实现方式「抽取」的方式也不同

将内容切割为若干份,然后挑选,这样的流程可能需要执行几次,(为什么要这样干呢)

然后生成初步的答案经过挑选作为最后的答案

这里 openai 似乎只读 920 页内容,后面的内容不关心

感觉有些何意味的感觉,总之就是了解一下,不用过于关心了

这种方式虽然不需要向量化,但是花费会很高

(属于 Agentic RAG?)

RAG 实战-LLM-GEN

视频链接:大模型RAG企业项目实战:手把手带你搭建一套完整的RAG系统,原理讲解+代码解析,草履虫都能学明白!...

这是一个系统性的 RAG 教学课程,从零开始讲清楚 RAG 的完整流程、底层原理和实战技巧。


核心流程:RAG 两大步骤

离线阶段(系统上线前完成)

文档 → 加载 → 切分(chunk) → 向量化(embedding) → 存入向量数据库
  1. 文档加载 — 读取 PDF 等文档,提取文本
  2. 文档切分 — 按段落或按固定长度+交叠(overlap)切分,确保语义完整
  3. 向量化 — 使用 embedding 模型(如 OpenAI text-embedding-ada-002 或开源的 BGE)将文本转为向量
  4. 存入向量数据库 — 如 ChromaDB、Milvus、Pinecone 等

在线阶段(用户提问时)

用户 query → 向量化 → 检索向量数据库 → 召回相关片段 → 拼入 prompt → 调大模型 → 生成回答

关键知识点

1. 为什么需要 RAG?

2. 什么是向量(Embedding)?

3. 向量数据库 vs 关键字检索

4. 文档切分的坑与技巧

5. RAG 的优化技巧

技巧 说明
文档切分调优 调整 chunk 大小和 overlap 比率,确保答案不被切碎
检索后重排序(Rerank) 先用向量检索多召回几条,再用 Cross-Encoder 模型重新排序,把最相关的排前面
更换 embedding 模型 开源可选 BGE、M3E 等;跨语言需求首选 OpenAI ada-002
本地私有部署 embedding 使用 Sentence-Transformers 框架 + BGE 模型,数据不上传云端

6. 主流向量数据库对比

数据库 特点
Pinecone 付费云服务,省心,推荐给非私有化场景
Milvus 开源,功能完备,可极致调优,推荐
ChromaDB 轻量,适合学习和原型
Elasticsearch / Redis 老牌,也支持向量检索但性能不如专用库

7. 常见问题排查思路(重要!)

当 RAG 效果不好时,按以下三步拆解:

  1. 文档预处理 — 切出来的片段是否完整?答案有没有被切碎?
  2. 检索质量 — 检索回来的片段是否包含答案?是否排在前列?(检查 embedding 模型)
  3. 大模型能力 — 如果检索结果正确但回答不对,换大模型

永远不要笼统问"RAG 不好使怎么办",要学会拆解问题。